#ifndef PERSONNAGE
#define PERSONNAGE

//#include "../games/preprocessor.h"
#include "../objects/cls_objet.h" // objet du décors
#include "../multimedia/cls_multimedia.h" // Classe multimédia (Son, Vidéo...)

/* ----------------------------------------------------
			Classe
  ----------------------------------------------------- */
class cls_Personnage : public cls_Multimedia
{

private:
    cls_Map * clsMap_Encours;
    cls_PrimitiveTexte * clsPrimTexte_Dialogue;
    cls_Dialog* clsDialog;
    cls_Scenario* clsScenario;


    StrucPerso * paramPerso;

    int n_CST_SpriteNumber;
    int n_CST_SpriteWidth;
    int n_CST_SpriteHeight;
    int n_CST_SpriteLeftBorder;
    int n_CST_SpriteRightBorder;
    int n_CST_SpriteVelocity;
    int n_CST_SpriteDelay;

    // Gestion du sprite personnage en mouvement
    SDL_Surface * p_sdlS_SpritePerso;
    SDL_Rect * p_sdlR_positionSpriteGD;
    SDL_Rect * p_sdlR_positionSpriteDG;
    int n_IndexSprite;

    // Gestion du sprite personnage en pause
    SDL_Surface * p_sdlS_SpritePersoPause;
    SDL_Rect sdlR_positionSpritePause[1];
    int n_IndexSpritePause;

    // Gestion de l'interval de mise à jour
    int n_NextUpdateTime;

    // Vitesse de déplacement sur les axes X et Y
    int n_xVelocity;
    int n_yVelocity;

    // Direction du mouvement
    int n_DirectionMovement;

    // Position XY du personnage
    SDL_Rect sdlR_PositionPerso_XY;
    SDL_Rect sdlR_DestinationPerso_XY;


    /* --------- METHODE --------------*/

    // Retourne l'index du tableau contenant les coordonnées de l'élément
    // suivant dans le sprite
    int fct_NextSpriteIndex();
    void fct_MoveStop();

public:

    // Constructueur et destructeur
	cls_Personnage();
	~cls_Personnage();

    /* --------- METHODE --------------*/

    // Initialisation du personnage
    void fct_InitPersonnage(cls_Map * clsMap_Encours, cls_PrimitiveTexte * clsPrimTexte_Dialogue, cls_Scenario* clsScenario, cls_Dialog* clsDialog, StrucPerso * paramPerso);

    // Gestion des évènements pour le personnage
    void fct_HandleInput(SDL_Event event);

    // Dessine le personnage à l'écran
    int fct_DrawPerso(SDL_Surface *p_sdlS_Ecran, int n_CurrentTime);

    // Donne la position
    int fct_GetPosX();
    int fct_GetPosY();
    int fct_GetHeight();
    int fct_GetWidth();

    // Libere les surfaces
    void fct_FreeSurface();
};

#endif
